#!/usr/bin/python
# -*- coding: UTF-8 -*-
__author__ = 'dengqianyi'
import itertools
class Observed(object):
    def __init__(self):
        self.__observers = set()
    def addObserves(self, observer, *observers):
        for observer in itertools.chain((observer,), observers):
            self.__observers.add(observer)
            observer.update(self)
        pass
    def disObserves(self, observer):
        self.__observers.discard(observer)
        pass
    def observers_notify(self):
        for observer in self.__observers:
            observer.update(self)
        pass
    pass
# class SliderModel(Observed):
#
#     def __init__(self, minimum, value, maximum):
#         super().__init__()
#         # These must exist before using their property setters
#         self.__minimum = self.__value = self.__maximum = None
#         self.minimum = minimum
#         self.value = value
#         self.maximum = maximum
#
#
#     @property
#     def value(self):
#         return self.__value
#
#
#     @value.setter
#     def value(self, value):
#         if self.__value != value:
#             self.__value = value
#             self.observers_notify()
#
#
#     @property
#     def minimum(self):
#         return self.__minimum
#
#
#     @minimum.setter
#     def minimum(self, value):
#         if self.__minimum != value:
#             self.__minimum = value
#             self.observers_notify()
#
#
#     @property
#     def maximum(self):
#         return self.__maximum
#
#
#     @maximum.setter
#     def maximum(self, value):
#         if self.__maximum != value:
#             self.__maximum = value
#             self.observers_notify()
#
#
# class HistoryView:
#
#     def __init__(self):
#         self.data = []
#
#
#     def update(self, model):
#         self.data.append((model.value, time.time()))
#
#
# class LiveView:
#
#     def __init__(self, length=40):
#         self.length = length
#
#
#     def update(self, model):
#         tippingPoint = round(model.value * self.length /
#                 (model.maximum - model.minimum))
#         td = '<td style="background-color: {}">&nbsp;</td>'
#         html = ['<table style="font-family: monospace" border="0"><tr>']
#         html.extend(td.format("darkblue") * tippingPoint)
#         html.extend(td.format("cyan") * (self.length - tippingPoint))
#         html.append("<td>{}</td></tr></table>".format(model.value))
#         print("".join(html))